package w83b.w83bOperacionesPaso.w83bComunicaciones;

import java.util.HashMap;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import w83b.w83bBeans.W83bComunicacionesBean;
import w83b.w83bBeans.W83bPlantillasBean;
import w83b.w83bUtilidades.W83bUtilidadesRTF;
import w83b.w83bUtilidadesComunes.W83bClsConstantes;
import w83b.w83bUtilidadesComunes.W83bUtilidades;
import es.ejie.frmk.presentacion.operacion.paso.Q70ActionPasoOP;
import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE;

public class W83bGenerarRtfEtiquetasAction extends Q70ActionPasoOP{


	
	protected void processOP(Q70ContextoEJIE contexto, ActionErrors errores, ActionMapping mapping,
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		
	}

	protected ActionForward processForward(Q70ContextoEJIE contexto, ActionErrors errors, ActionMapping mapping, 
		ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
				 
		//String strRutaRtf ="";
		HashMap mapaPar = new HashMap();
		List comunicacion=(List)contexto.get("w83bResultadoBean");
		//strRutaRtf = Q70ListenerUtils.getApplicationProperty("RUTA_PLANTILLAS_RTF")+"plantillaEtiquetasCitacion.rtf";
		mapaPar.put("<<finrep>>","");
		mapaPar.put("<<iniciorep>>","");
//		CharSequence content=W83bUtilidadesRTF.leerTodoFichero(strRutaRtf);	
		HashMap mapaPlantillas = (HashMap)contexto.get("w83bPlantillasMap");
		byte[] plantilla = ((W83bPlantillasBean)mapaPlantillas.get(W83bClsConstantes.ETIQUETAS.toUpperCase())).getFichero();
		
		CharSequence content=W83bUtilidadesRTF.leerTodoFichero(plantilla);
		String contenido=content.toString();	
		StringBuffer contenidoBuffer=new StringBuffer(contenido);	
		int y=contenidoBuffer.indexOf("<<iniciorep>>");
		int z=contenidoBuffer.indexOf("<<finrep>>");	
		String parteDelante=contenido.substring(0,y);
		String parteDetras=contenido.substring(z,contenido.length());
		int inicio=parteDelante.lastIndexOf("}")+1;
		int fin=parteDetras.indexOf("}")+1+z;
		String parteDelanteLimpia=contenido.substring(0,inicio);
		String parteAtrasLimpia=contenido.substring(fin,contenido.length());
		contenidoBuffer=new StringBuffer(contenidoBuffer.substring(y,fin));	
		String saltos="\r\n\\par \r\n\\par \r\n\\par \r\n\\par \r\n\\par ";
		int inicioSaltos=contenidoBuffer.indexOf(saltos);
		StringBuffer contenidoBufferCorto=new StringBuffer(contenidoBuffer.toString());
		contenidoBufferCorto.replace(inicioSaltos,inicioSaltos+saltos.length(),"\r\n\\par \r\n\\par ");
		StringBuffer datos=new StringBuffer();
		datos.append(parteDelanteLimpia);
		StringBuffer elemento=new StringBuffer(W83bClsConstantes.CUARENTA);
		int numElem=1;
		String cp="";
		for(int i=0;i<comunicacion.size()-1;i++)
		{
			W83bComunicacionesBean comunic=(W83bComunicacionesBean)comunicacion.get(i);
			String razon=W83bUtilidades.convertirAVasioSiNulo(comunic.getRazon());
			String razonSalto=W83bUtilidadesRTF.meterIntroEtiquetas(razon,0,3);
			int numsaltosRazon=W83bUtilidadesRTF.numIntros(razonSalto);
			mapaPar.put("<<RAZON>>",razonSalto);
			String direccion="";
			if (W83bClsConstantes.CONSTANTE_NO_VALIDADA.equals(comunic.getCentroSel())||StringUtils.isEmpty(comunic.getDirorig())){
				direccion=W83bUtilidades.convertirAVasioSiNulo(comunic.getDomicilio());
			}
			else{
				direccion=W83bUtilidades.convertirAVasioSiNulo(comunic.getDirorig());
			}
			String direccionSalto=W83bUtilidadesRTF.meterIntroEtiquetas(direccion,0,3);
			int numsaltosDireccion=W83bUtilidadesRTF.numIntros(direccionSalto);
			mapaPar.put("<<DOMIC>>",direccionSalto);
			
			cp=comunic.getCodigopostal();
			if (W83bClsConstantes.CONSTANTE_NO_VALIDADA.equals(comunic.getCentroSel())||StringUtils.isEmpty(comunic.getCporig())){
				mapaPar.put("<<CPOST>>",cp);
			}
			else{
				mapaPar.put("<<CPOST>>",comunic.getCporig());
			}
			String munic=W83bUtilidades.convertirAVasioSiNulo(comunic.getMunicipio());
			if (!("").equals(cp.trim())&&!("").equals(munic.trim())){
				mapaPar.put("<<LOCAL>>","-"+munic);
			}
			else{
				mapaPar.put("<<LOCAL>>",munic);
			}
			mapaPar.put("<<PROV>>",comunic.getProvincia());
			if ("preaviso".equals(comunicacion.get(comunicacion.size()-1))){
				mapaPar.put("<<EXPDTE>>",comunic.getNumpreaviso());
			}else if ("faltapre".equals(comunicacion.get(comunicacion.size()-1))||"laudonegativo".equals(comunicacion.get(comunicacion.size()-1))||"requemesa".equals(comunicacion.get(comunicacion.size()-1))||"comempresas".equals(comunicacion.get(comunicacion.size()-1))){
				mapaPar.put("<<EXPDTE>>",comunic.getTerrit()+"/"+comunic.getAnoacta()+"/"+W83bUtilidades.rellenarCaracter(comunic.getNacta(), "0", 6, true));
			}else if ("comincidencias".equals(comunicacion.get(comunicacion.size()-1))){
				mapaPar.put("<<EXPDTE>>",comunic.getTerrit()+"/"+comunic.getAnoincidencia()+"/"+W83bUtilidades.rellenarCaracter(comunic.getNumincidencia(), "0", 6, true));
			}
			
			if(numElem%7==0)
			{
				
				elemento=W83bUtilidadesRTF.sustituirCadenaCaracteresString(contenidoBufferCorto, mapaPar);
				
			}else{
				elemento=W83bUtilidadesRTF.sustituirCadenaCaracteresString(contenidoBuffer, mapaPar);
			}
			String s="";
			int inicioS=0;
			if(razon.length()>30)
			{
				if(numElem%7==0)
				{
					if(numsaltosRazon==W83bClsConstantes.UNO)
					{
						s="\\par \\par";
						inicioS=elemento.lastIndexOf(s);
						elemento.replace(inicioS,inicioS+s.length(),"\\par ");
					}else if(numsaltosRazon==W83bClsConstantes.DOS)
					{
						s="\\par \\par";
						inicioS=elemento.lastIndexOf(s);
						elemento.replace(inicioS,inicioS+s.length(),"");
					}

				}
				else{
					if(numsaltosRazon==W83bClsConstantes.UNO)
					{
						s="\\par \\par \\par \\par \\par ";
						inicioS=elemento.lastIndexOf(s);
						elemento.replace(inicioS,inicioS+s.length(),"\\par \\par \\par \\par ");
					}else if(numsaltosRazon==W83bClsConstantes.DOS)
					{
						s="\\par \\par \\par \\par \\par ";
						inicioS=elemento.lastIndexOf(s);
						elemento.replace(inicioS,inicioS+s.length(),"\\par \\par \\par ");
					}
				}
			}
			if(direccion.length()>30)
			{
				if(numElem%7==0)
				{
					if(numsaltosDireccion==W83bClsConstantes.UNO)
					{
						s="\\par ";
						inicioS=elemento.lastIndexOf(s);
						elemento.replace(inicioS,inicioS+s.length(),"");
					}else if(numsaltosDireccion==W83bClsConstantes.DOS)
					{
						s="\\par \\par ";
						inicioS=elemento.lastIndexOf(s);
						elemento.replace(inicioS,inicioS+s.length(),"");
					}
				}
				else{
					if(numsaltosDireccion==W83bClsConstantes.UNO)
					{
						s="\\par \\par \\par \\par ";
						inicioS=elemento.lastIndexOf(s);
						elemento.replace(inicioS,inicioS+s.length(),"\\par \\par \\par ");
					}else if(numsaltosDireccion==W83bClsConstantes.DOS)
					{
						s="\\par \\par \\par \\par ";
						inicioS=elemento.lastIndexOf(s);
						elemento.replace(inicioS,inicioS+s.length(),"\\par \\par ");
					}
				}

				
				
			}
			
			datos.append(elemento);

			numElem++;
		}
		
			
		//para cerrar el contenido del documento metemos la parte trasera.
		datos.append(parteAtrasLimpia);
		
        response.setContentType("application/msword");
        response.setContentLength(datos.toString().getBytes().length);
        if ("preaviso".equals(comunicacion.get(comunicacion.size()-1))){
       	 response.setHeader("Content-disposition","attachment;filename=EtiquetasPreavisos.rtf");
		}else if ("faltapre".equals(comunicacion.get(comunicacion.size()-1))){
			 response.setHeader("Content-disposition","attachment;filename=EtiquetasFaltaPreaviso.rtf");
		}else if ("laudonegativo".equals(comunicacion.get(comunicacion.size()-1))){
			 response.setHeader("Content-disposition","attachment;filename=EtiquetasLaudoNegativo.rtf");
		}else if ("requemesa".equals(comunicacion.get(comunicacion.size()-1))){
			 response.setHeader("Content-disposition","attachment;filename=EtiquetasRequerimientoMesa.rtf");
		}else if ("comempresas".equals(comunicacion.get(comunicacion.size()-1))){
			 response.setHeader("Content-disposition","attachment;filename=EtiquetasComunicacionEmpresas.rtf");
		}else if ("comincidencias".equals(comunicacion.get(comunicacion.size()-1))){
			 response.setHeader("Content-disposition","attachment;filename=EtiquetasComunicacionIncidencias.rtf");
		}
        response.getOutputStream().write(datos.toString().getBytes());
        response.getOutputStream().flush();

		
		return null;
	}
		
}

